flowchart BT
  RequiredToBeUniform ==> workgroupBarriercall;
  CFreturn -.-> CFstart;
  loopstart ==> ifCFend;
  loopstart -.-> CFstart;
  ivalueforloopin -.-> CFstart;
  ivalueforloopin -.-> ilvalue;
  iidentexpr -.-> loopstart;
  iidentexpr -.-> ivalueforloopin;
  binaryexprresult -.-> iidentexpr;
  binaryexprresult ==> loopstart;
  forconditionCFend ==> binaryexprresult;
  ivalueforloopexit -.-> ivalueforloopin;
  workgroupBarriercall ==> forconditionCFend;
  CFafterworkgroupBarrier -.-> workgroupBarriercall;
  lididentexpr ==> MayBeNonUniform;
  iidentexpr1 -.-> CFafterworkgroupBarrier;
  iidentexpr1 -.-> ivalueforloopin;
  binaryexprresult1 ==> lididentexpr;
  binaryexprresult1 -.-> iidentexpr1;
  binaryexprresult2 ==> binaryexprresult1;
  binaryexprresult2 -.-> CFafterworkgroupBarrier;
  ifstmt ==> binaryexprresult2;
  ifCFend ==> ifstmt;
  iidentexpr2 -.-> ifCFend;
  iidentexpr2 -.-> ivalueforloopin;
  incdecresult -.-> iidentexpr2;
  incdecresult -.-> ifCFend;
  ilvalue -.-> incdecresult;

  style MayBeNonUniform fill:#941b1b
  style RequiredToBeUniform fill:#1818ab
  linkStyle 0,2,9,10,12,14,17,19,21,22 stroke:#941b1b

  CFstart([CF_start]);
  CFreturn([CF_return]);
  loopstart([CF_loop_body]);
  ivalueforloopin[var_value: i at loop body];
  iidentexpr[var_ident_expr: i];
  binaryexprresult[binary_expr: i < 10];
  forconditionCFend([CF_end_for_condition]);
  ivalueforloopexit[var_value: i at loop end];
  iidentexpr2([var_ident_expr: i]);
  incdecresult[increment_stmt];
  ilvalue[lvalue: i];
  workgroupBarriercall([call: workgroupBarrier]);
  CFafterworkgroupBarrier([CF_after_workgroupBarrier]);
  subgraph if [if lid + i > 7]
    iidentexpr1[var_ident_expr: i];
    lididentexpr[formal_param_expr: lid];
    binaryexprresult1[binary_expr: lid + i];
    binaryexprresult2[binary_expr: lid + i > 7];
    ifstmt([if_stmt: lid + i > 7]);
    ifCFend([CF_after_if]);
   end
